package cn.edu.wynu;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class LogAspect {
    /**
     * 这个类的作用:告诉Spring需要将哪些代码流程切开,
     * 然后插入想要执行的代码
     */


    /**
     * @Before: 在指定的代码前面添加下面的流程
     * @After: 在指定的代码之后添加下面的流程
     *
     * 切面表达式:
     *          ①execution开始
     *          ②圆括号里面放入具体的表达式
     *              1.方法修饰符(public private protected)
     *              2.方法返回值(void int String float...)
     *              3.包名(cn.edu.wynu)
     *              4.类名(BookHandler)
     *              5.方法名(addBook delBook....)
     *              6.参数列表(int, int)只切2个参数,并且类型都是int的方法;
     *                  (..)代表所有类型的返回值都切
     */
    @Before(value = "myPointCut()")
    public void welcome() {
        System.out.println("******************************");
        System.out.println("欢迎光临!");
    }
    @After(value = "myPointCut()")
    public void bye() {
        System.out.println("欢迎下次光临!");
        System.out.println("******************************");
    }

    /**
     * 切点 是匹配连接点的一个抽象概念，例如execution(* com.BookHandler.addBook(..))表达式就代表一个切点
     */
    @Pointcut(value = "execution(public void cn.edu.wynu.BookHandler.*(..)))")
    public void myPointCut(){}
}
